Expressions/ko

개요

수학적 표현식을 사용하여 속성을 정의할 수 있습니다. 표현식으로 속성이 정의되면 GUI 입력란 오른쪽의 수학식을 상징하는 아이콘 은 회색에서 파란색으로 바뀝니다. 아이콘을 클릭하거나 등호 =를 입력하면 해당 속성에 대한 표현식 편집기가 열립니다. 입력란에 아이콘 대신 ... 버튼이 표시되는 경우 속성을 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 표현식...을 선택하면 표현식 편집기를 열 수 있습니다.

FreeCAD 표현식은 아래에 설명된 표준 수학 연산자, 함수미리 정의된 상수를 사용하는 수학적 표현식입니다. 또한 표현식은 개체 속성을 참조할 수도 있고 조건문을 사용할 수도 있습니다. 표현식의 숫자에는 선택적으로 단위가 붙을 수 있습니다.

숫자에는 쉼표 , 또는 소수점 .을 사용하여 숫자와 소수점을 구분할 수 있습니다. 소수점 표시를 사용할 때에는 '반드시' 숫자가 하나 이상 뒤에 와야 합니다. 따라서 표현식 1. + 2.1, + 2,는 유효하지 않지만, 1.0 + 2.01,0 + 2,0은 유효한 표현입니다.

연산자와 함수는 단위를 인식하며, 단위를 넣을 경우 유효한 단위 조합이 필요합니다. 예를 들어, 2mm + 4mm는 유효한 표현식이지만, 2mm + 4는 유효하지 않습니다. 이 규칙은 길이 속성과 같이 단위가 있는 개체 속성에 대한 참조에도 적용됩니다. 따라서 Pad001.Length + 1은 길이 단위가 있는 속성에 순수한 숫자를 추가하므로 유효하지 않습니다. Pad001.Length + 1mm처럼 단위를 붙여햐 합니다.

일부 단위 관련 오류는 직관적이지 않은 것처럼 보일 수 있으며, 표현식이 거부되거나 설정된 속성의 단위와 일치하지 않는 결과가 생성될 수 있습니다. 다음은 몇 가지 예입니다.

1/2mm is not interpreted as half a millimeter but as 1/(2mm), resulting in: 0.5 mm^-1.

sqrt(2)mm is not valid because the function call is not a number. This has to be entered as sqrt(2) * 1mm.

함수의 인수

함수에 다수의 인수를 전달할 때는 세미콜론 ;이나 쉼표 뒤에 공백 , 으로 구분합니다.(예: sum(10;20)또는 sum(10, 20) ) 후자의 경우, 쉼표는 입력 후 세미콜론으로 자동으로 변환되며 만일 쉼표 뒤에 공백이 없다면 이 경우 두 개의 인수가 아닌 10.2라는 하나의 인수로 인식하여 의도하지 않은 결과를 얻을 수 있습니다. 세미콜론을 사용하면 공백이 필요하지 않고 실수를 예방할 수 있습니다.

인수에는 스프레드시트의 셀에 대한 참조가 포함될 수 있습니다. 셀 참조시에는 셀의 대문자 열 뒤에 행 번호를 사용합니다(예: A1). 셀은 또한 별칭(예: Spreadsheet.MyPartWidth)을 사용하여 참조될 수 있습니다.

객체 참조

위에서 이미 본 것처럼, 데이터Name으로 객체를 참조할 수 있습니다. 하지만 데이터Label을 사용할 수도 있습니다. 데이터Label의 경우 <<>> 기호를 두 개 사용하여 묶어야 합니다(예: <<Label>>).

표현식에서는 객체의 어떤 속성이든 참조할 수 있습니다. 예를 들어, Cylinder의 높이를 참조하려면 Cylinder.Height 또는 <<Label_of_cylinder>>.Height를 사용할 수 있습니다.

객체 참조에 대한 자세한 내용은 CAD 데이터 참조를 부분을 보세요.

Top

지원되는 상수

다음의 상수들을 표현식에 사용할 수 있습니다.

상수 설명
e Euler's number
pi Pi

Top

지원되는 연산

다음 연산들을 사용할 수 있습니다.

연산자자 설명
+ 덧셈
- 뺄셈
*
/ 부동 소수점 나눗셈
% 나머지
^ 지수화

Top

지원되는 함수

일반 수학 함수

표현식에서 다음의 수학 함수들을 사용할 수 있습니다:

삼각 함수

삼각 함수는 기본적으로 각도의 단위로 도(度)를 사용합니다. 각도의 단위로 라디안을 사용하는 경우 표현식의 첫 번째 값 뒤에 rad를 추가합니다. 예를 들어 cos(45)cos(pi rad / 4)와 동일합니다. 각도 표현에서는 deg 또는 °를 사용할 수 있습니다(예: 360deg - atan2(3; 4) 또는 360° - atan2(3; 4)). 표현식에 단위가 없고 호환성을 위해 도 또는 라디안으로 변환해야 하는 경우, 1deg, 또는 1rad를 적절하게 곱합니다(예: (360 - X) * 1deg; (360 - X) * 1°; (0.5 + pi / 2) * 1rad).

함수 설명 입력값 범위
acos(x) Arc cosine -1 <= x <= 1
asin(x) Arc sine -1 <= x <= 1
atan(x) Arc tangent, return value in the range -90° < value < 90° all
atan2(y; x) Arc tangent of y/x accounting for quadrant, return value in the range -180° < value <= 180° all, the invalid input x = y = 0 returns 0
cos(x) Cosine all
cosh(x) Hyperbolic cosine all
sin(x) Sine all
sinh(x) Hyperbolic sine all
tan(x) Tangent all, except x = n*90 with n = odd integer
tanh(x) Hyperbolic tangent all
hypot(x; y) Pythagorean addition (hypotenuse), e.g. hypot(4; 3) = 5 x and y >= 0
cath(x; y) Given hypotenuse, and one side, returns other side of triangle, e.g. cath(5; 3) = 4 x >= y >= 0

지수 함수와 대수 함수

함수 설명 입력값 범위
exp(x) 지수 함수(Exponential function) all
log(x) 자연 로그(Natural logarithm) x > 0
log10(x) 상용 로그(Common logarithm) x > 0
pow(x; y) Exponentiation all
sqrt(x) 제곱근(Square root) x >= 0
cbrt(x) introduced in version 0.21 세제곱근(Cubic root) all

반올림, 잘라내기 및 나머지 함수

함수 설명 입력값 범위
abs(x) 절대값(Absolute value) all
ceil(x) 천정 함수(Ceiling function), x보다 크거나 같은 최소 정수 값 all
floor(x) 바닥 함수(Floor function), x보다 작거나 같은 최대 정수 값 all
mod(x; y) x를 y로 나눈 나머지, 결과의 부호는 피제수의 부호와 같습니다. all, except y = 0
round(x) 가장 가까운 정수로 반올림 all
trunc(x) 0 방향의 가장 가까운 정수로 잘라내기 all

Top

통계/집계 함수

집계 함수는 하나 이상의 인수를 취합니다.

집계 함수의 개별 인수는 셀 범위로 구성될 수 있습니다. 셀 범위는 콜론 :으로 구분된 두 개의 셀 참조로 표현됩니다(예: average(B1:B8) 또는 sum(A1:A4; B1:B4)). 셀 참조는 셀 별칭(예: average(StartTemp:EndTemp))을 사용할 수도 있습니다.

다음과 같은 집계 함수를 사용할 수 있습니다.

함수 설명 입력값 범위
average(a; b; c; ...) 인수의 산술 평균값으로 , sum(a; b; c; ...) / count(a; b; c; ...)와 동일합니다. all
count(a; b; c; ...) 일반적으로 셀 범위에 사용되는 인수의 개수(Count) all
max(a; b; c; ...) 인수의 최대(Maximum) all
min(a; b; c; ...) 인수의 최소(Minimum) all
stddev(a; b; c; ...) Standard deviation of the values of the arguments all
sum(a; b; c; ...) 인수 값의 합계(Sum)는 일반적으로 셀 범위에 사용됩니다. all

Top

문자열 조작

문자열 식별

표현식에서 문자열은 문자열을 여는/닫는 겹화살 괄호로 둘러싸서 식별합니다.

다음 예에서 "TEXT"는 문자열로 인식됩니다: <<TEXT>>

문자열 연결

문자열은 '+' 기호를 사용하여 연결할 수 있습니다.

다음 예제 <<MY>> + <<TEXT>>는 "MYTEXT"로 연결됩니다.

문자열 변환

숫자 값은 str 함수를 사용하여 문자열로 변환할 수 있습니다.

str(Box.Length.Value)

문자열 서식

문자열 서식은 (오래된) % 형식의 파이썬 방식을 사용하여 지원됩니다.

모든 %-지정자는 파이썬 문서에 정의된 대로입니다.

예를 들어, 'Box'라는 이름(기본 FreeCAD 명명)의 기본 한 변의 길이가10mm인 정육면체가 있다고 가정하면, 다음 표현식 <<정육면체 길이 : %s>> % Box.Length는 "정육면체 길이 : 10.0 mm"로 치환 됩니다.

% 지정자가 두 개 이상인 경우 다음 구문을 사용하세요: <<큐브 길이는 %s이고 너비는 %s입니다>> % tuple(Box.Length; Box.Width). 또는 연결을 사용하세요: <<큐브 길이는 %s입니다>> % Box.Length + << 너비는 %s입니다>> % Box.Width. 둘 다 "큐브의 길이는 10.0mm이고 너비는 10.0mm입니다"로 치환 됩니다.

문자열 서식을 사용하는 FreeCAD 예제는 포럼에서 볼 수 있습니다.

Top

객체 생성 함수

The following objects may be created in expressions using the following functions:

Type Function Description
Tuple tuple(a; b; ...) Example: tuple(2; 1; 2)
List list(a; b; ...) Example: list(2; 1; 2)
Vector vector(x; y; z) Create a vector using three unit-less or Length unit values.

Example: vector(2; 1; 3)

create(<<vector>>; x; y; z)
Matrix
matrix(
  a11; a12; a13; a14;
  a21; a22; a23; a24;
  a31; a32; a33; a34;
  a41; a42; a43; a44
)
Create a 4x4 matrix in row-major order:

A minimum of 1 argument can be supplied such as matrix(1) which creates an identity matrix.

Example: matrix(1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16)

create(<<matrix>>; a11; a12; ...; a44)
Rotation rotation(axis; angle) Create a Rotation by specifying its axis (Vector) and angle (Angle unit or unit-less), or three Euler angles α, β, γ.

Examples:

  • rotation(vector(0; 1; 0); 45)
  • create(<<rotation>>; 30; 30; 30)
rotation(α; β; γ)
create(<<rotation>>; axis; angle)
create(<<rotation>>; α; β; γ)
Placement placement(base; rotation) Create a Placement with various parameters, including:
  • base: base location (Vector)
  • center: center location (Vector)
  • rotation: Rotation
  • axis: Rotation axis (Vector)
  • angle: Rotation angle (unit-less or Angle unit value)
  • matrix: Matrix

Examples:

  • placement(vector(2; 1; 3); rotation(vector(0; 0; 1); 45))
  • create(<<placement>>; create(<<vector>>; 2; 1; 2); create(<<rotation>>; create(<<vector>>; 0; 1; 0); 45))
placement(base; rotation; center)
placement(base; axis; angle)
placement(matrix)
create(<<placement>>; ...)

Top

향량(Vector) 함수

함수: introduced in version 1.0.

함수 / 연산자 설명
v1 + v2 두 향량의 덧셈.
v1 - v2 두 향량의 뺄셈.
v * s 향량을 균일하게 s 배율 곱.
vangle(v1; v2) 두 향량 사이의 각도
vcross(v1; v2) Cross product of two vectors .
v1 * v2 Dot product of two vectors .
vdot(v1; v2)
vlinedist(v1; v2; v3) Distance between vector v1 and a line through v2 in direction v3.
vlinesegdist(v1; v2; v3) Distance between vector v1 and the closest point on a line segment from v2 to v3.
vlineproj(v1; v2; v3) Project vector v1 on a line through v2 in direction v3.
vnormalize(v) Normalize a vector to a unit vector.
vplanedist(v1) Distance between vector v1 and a plane defined by a point v2 and a normal v3.
vplaneproj(v1) Project vector v1 on a plane defined by a point v2 and a normal v3.
vscale(v; sx; sy; sz) Non-uniformly scale a vector by sx in the X direction, sy in the Y direction, and sz in the Z direction.
vscalex(v; sx)
vscaley(v; sy)
vscalez(v; sz)

Top

행렬 함수

Rotation and Placement can each be represented by a Matrix. The following functions all take in a Matrix, Rotation, or Placement as their first parameter denoted in the table below by m. The type of the returned object is the same as the object supplied in the first argument except when using mtranslate on a Rotation, in which case a Placement will be returned.

Function Description
minvert(m) Calculate the Inverse matrix.
mrotate(m; rotation) Rotate by either:
  • a Rotation
  • an axis (Vector) and an angle (Angle unit or unit-less)
  • three Euler angles α, β, γ
mrotate(m; axis; angle)
mrotate(m; α; β; γ)
mrotatex(m; angle) Rotate around the X axis.
mrotatey(m; angle) Rotate around the Y axis.
mrotatez(m; angle) Rotate around the Z axis.
mtranslate(m; vector) Translate by a vector (Vector) or X, Y, Z values. If a Rotation is translated, the returned object is a Placement.
mtranslate(m; x; y; z)
mscale(m; vector) Scale by a vector (Vector) or X, Y, Z values.
mscale(m; x; y; z)

Top

조건식

조건식은 조건 ? 참인 경우 결과 : 거짓인 경우 결과 형식입니다. 조건은 0(false) 또는 0이 아닌 값(true)으로 평가되는 식으로 정의됩니다.

부울 속성을 조건으로 사용하려면 다음 구문을 사용해야 합니다. VarSet.MyBool == 1 ? 10 mm : 15 mm.

다음의 관계 연산자 정의되어 있습니다.

연산자
== 양 쪽이 같다
!= 같지 않다
> 왼쪽이 오른쪽 보다 크다
< 왼쪽이 오른쪽 보다 작다
>= 왼쪽이 오른쪽 보다 크거나 같다
<= 왼족이 오른쪽 보다 작거나 같다

Top

단위

단위는 표현식에서 직접 사용할 수 있습니다. FreeCAD의 구문 분석기는 단위를 앞의 값에 연결합니다. 따라서 2mm 또는 2 mm는 유효하지만 mm는 선행 값이 없기 때문에 유효하지 않습니다.

모든 값에는 단위가 있어야 합니다. 따라서 일반적으로 스프레드시트의 값에는 단위를 사용해야 합니다.
어떤 경우에는 단위가 없어도 작동합니다. 예를 들어, 스프레드시트 셀 B1에 숫자 1.5만 있고 깔판(pad) 높이를 참조하는 경우입니다. 단위가 지정되지 않은 경우에 사용되는 단위 mm를 미리 정의되었기 때문에 작동합니다. 그럼에도 불구하고 깔판 높이로 Sketch1.Constraints.Width - Spreadsheet.B1을 사용하면 실패합니다. 그 이유는 Sketch1.Constraints.Width에는 단위가 있지만 Spreadsheet.B1에는 단위가 없기 때문입니다.

지수가 있는 단위는 직접 입력할 수 있습니다. 예를 들어 mm^3은 mm³로 인식되고 m^3은 m³로 인식됩니다.

변수 이름이 단위와 같을 경우 변수를 << >> 사이에 넣어야 단위로 인식되는 것을 방지할 수 있습니다. 예를 들어, 치수 이름이 Sketch.Constraints.A이면 전류 단위인 암페어로 인식됩니다. 따라서 표현식에서 Sketch.Constraints.<<A>>로 작성해야 합니다.

다음 단위들은 표현식의 구문 분석기에 의해 인식됩니다:

물질의 양

단위 설명
mmol 밀리몰(Millimole)
mol 몰(Mole)

각도

단위 설명
° Degree; alternative to the unit deg
deg Degree; alternative to the unit °
rad Radian
gon Gradian
S Second of arc; alternative to the unit ″
Second of arc; alternative to the unit S
M Minute of arc; alternative to the unit ′
Minute of arc; alternative to the unit M

전류

단위 설명
mA Milliampere
A 암페어(Ampere)
kA Kiloampere
MA Megaampere

정전 용량

단위 설명
pF Picofarad
nF Nanofarad
uF Microfarad; alternative to the unit µF
µF Microfarad; alternative to the unit uF
mF Millifarad
F 패럿(Farad); 1 F = 1 s^4·A^2/m^2/kg

전하량

단위 설명
C 쿨롱(Coulomb); 1 C = 1 A*s

전기 전도도

단위 설명
uS Microsiemens; alternative to the unit µS
µS Microsiemens; alternative to the unit uS
mS Milli지멘스
S Siemens; 1 S = 1 s^3·A^2/kg/m^2
kS KiloSiemens
MS MegaSiemens

전기 유도용량

단위 설명
nH Nanohenry
uH Microhenry; alternative to the unit µH
µH Microhenry; alternative to the unit uH
mH Millihenry
H 헨리; 1 H = 1 kg·m^2/s^2/A^2

전위

단위 설명
mV Millivolt
V 볼트(Volt)
kV Kilovolt

전기 저항

단위 설명
Ohm 옴(Ohm); 1 Ohm = 1 kg·m^2/s^3/A^2
kOhm Kiloohm
MOhm Megaohm

능량(能量, Energy)/일(work)

단위 설명
mJ Millijoule
J 줄(Joule)
kJ Kilojoule
eV Electronvolt; 1 eV = 1.602176634e-19 J
keV Kiloelectronvolt
MeV Megaelectronvolt
kWh Kilowatt hour; 1 kWh = 3.6e6 J
Ws 와트시; alternative to the unit Joule
VAs Volt-ampere-second; alternative to the unit Joule
CV Coulomb-volt; alternative to the unit Joule
cal 칼로리(Calorie); 1 cal = 4.184 J
kcal Kilocalorie

힘(Force)

단위 설명
mN Milli뉴튼(newton)
N Newton
kN Kilonewton
MN Meganewton
lbf Pound of force

길이

단위 설명
nm Nanometer
um Micrometer; alternative to the unit µm
µm Micrometer; alternative to the unit um
mm Millimeter
cm Centimeter
dm Deci미터(Meter)
m Meter
km Kilometer
mil Thousandth of an inch; alternative to the unit thou
thou Thousandth of an inch; alternative to the unit mil
in Inch; alternative to the unit "
" Inch; alternative to the unit in
ft Foot; alternative to the unit '
' Foot; alternative to the unit ft
yd Yard
mi Mile

Luminous intensity

Unit Description
cd Candela

자속(磁束)

Unit Description
Wb Weber; 1 Wb = 1 kg*m^2/s^2/A

자속밀도

Unit Description
G Gauss; 1 G = 1 e-4 T
T Tesla; 1 T = 1 kg/s^2/A

질량

단위 설명
ug Microgram; alternative to the unit µg
µg Microgram; alternative to the unit ug
mg 밀리그램
g 그램
kg 킬로그램
t
oz Ounce
lb Pound; alternative to the unit lbm
lbm Pound; alternative to the unit lb
st Stone
cwt Hundredweight

전력(電力, Power)

단위 설명
W 와트(Watt)
kW 킬로와트

압력

단위 설명
Pa 파스칼
kPa Kilopascal
MPa Megapascal
GPa Gigapascal
uTorr Microtorr; alternative to the unit µTorr
µTorr Microtorr; alternative to the unit uTorr
mTorr Millitorr
Torr Torr; 1 Torr = 133.32 Pa
psi Pound-force per square inch; 1 psi = 6.895 kPa
ksi Kilopound-force per square inch

온도

단위 설명
uK Microkelvin; alternative to the unit µK
µK Microkelvin; alternative to the unit uK
mK Millikelvin
K 켈빈

시간

단위 설명
s
min
h 시간
Hz (1/s) 헤르츠
kHz Kilohertz,
MHz Megahertz
GHz Gigahertz
THz Terahertz

부피

단위 설명
ml Milliliter
l 리터
cft Cubicfoot

Special imperial units

Unit Description
mph Miles per hour
sqft Square foot

지원되지 않는 단위

다음과 같은 일반적으로 사용되는 단위는 아직 지원되지 않으며, 일부 단위에는 대체 단위가 제공됩니다.

단위 설명 대체
°C Celsius [°C] + 273.15 K
°F Fahrenheit; ([°F] + 459.67) × ​5/9
u Atomic mass unit; alternative to the unit Da 1.66053906660e-27 kg
Da Dalton; alternative to the unit u 1.66053906660e-27 kg
sr Steradian not directly
lm Lumen not directly
lx Lux not directly
px Pixel not directly

Top

잘못된 문자 및 이름

표현식은 매우 강력하지만,일부 문자 사용에 제약이 있습니다. 이를 극복하기 위해 FreeCAD는 개체 이름 대신 표지(Label)을 사용하고 참조하도록 제안합니다. 표지에서는 거의 모든 특수 문자를 사용할 수 있습니다.

스케치의 구속 이름과 같은 표지(lable)를 사용할 수 없는 경우 어떤 문자가 허용되지 않는지 알고 있어야 합니다.

표지(Labels)

표지에는 사용할 수 없는 문자는 없지만 일부 문자는 이스케이프해야 합니다:

문자 설명
', \, " \를 앞에 추가하여 이스케이프해야 합니다.

예를 들어, 표지 Sketch\002<<Sketch\\002>>로 참조되어야 합니다.

이름

치수, 스케치 등의 객체의 이름에는 아래에 나열된 문자나 문자열이 ​​없어야 합니다. 그렇지 않은 이름은 유효하지 않습니다.

문자 / 문자열 Description
+, -, *, /, ^, _, <, >, (, ), {, }, [, ], ., ,, = 수학 연산자 또는 수학 구성의 일부인 문자
A, kA, mA, MA, J, K, ' , ft , °, 기타 등등! 단위인 문자 및 문자 시퀀스(단위 문단 참조)
#, !, ?, §, $, %, &, :, ;, \, |, ~, , ¿, 기타 등등! 자리 표시자로 사용하거나 특수 작업을 유발하는 데 사용되는 문자
pi, e 수학 상수
´, `, ' , " 강조에 사용되는 문자
공백 공백은 이름의 끝을 정의하므로 사용할 수 없습니다.

예를 들어, 다음 이름은 유효합니다: <<Sketch>>.Constraints.T2üßµ@. 그러나 다음의 이름은 유효하지 않은 이름입니다: <<Sketch>>.Constraints.test\result_2 (\r은 "캐리지 리턴"을 의미함) 또는 <<Sketch>>.Constraints.mol (mol은 단위임).

짧은 이름(특히 문자가 하나 또는 두 개뿐인 경우)은 쉽게 잘못된 이름을 생성할 수 있으므로 더 긴 이름을 사용하거나 적절한 명명 규칙을 수립하는 것을 고려하세요.

셀 별명

스프레드시트 SetAlias를 참조하세요.

Top

CAD 데이터 참조

모형 자체의 데이터를 표현식에서 사용하는 것이 가능합니다. 속성을 참조하려면 object_name.property 또는 <<object_label>>.property를 사용하고, 표지는 <<>>로 묶어야 합니다. 표지를 사용하려면 고유해야 합니다

다음 모든 예에서는 객체를 이름으로 참조하지만, 어떤 경우에도 객체 표지를 사용할 수 있습니다.

속성이 필드의 합성인 경우 개별 필드는 object_name.property.field로 액세스할 수 있습니다.

목록 객체를 참조하려면 object_name.list[list_index]를 사용합니다. 스케치에서 구속(Constraint)을 참조하려면 Sketch.Constraints[16]를 사용합니다.

객체 자체를 참조하려면 _self 가상 속성인 object_name._self를 사용합니다.

다음 표에서는 몇 가지 예를 더 보여줍니다:

CAD 데이터 표현식에서 호출 결과
상자의 길이 Box.Length 길이 (단위: mm)
상자의 부피 Box.Shape.Volume mm&sup3 단위의 부피
Shape type of the Box Box.Shape.ShapeType String: Solid
Label of the Box Box.Label String: Label
X-coordinate of center of mass of the Box Box.Shape.CenterOfMass.x X-coordinate in mm without units
X-coordinate of the Box placement Box.Placement.Base.x X-coordinate with units (mm)
X-component of the rotation axis of the Box placement Box.Placement.Rotation.Axis.x X-component of the unit vector in mm without units
Rotation angle of the Box placement Box.Placement.Rotation.Angle Rotation angle with units (deg)
Full Box object Box._self Object of type <Part::PartFeature>
Value of constraint in a sketch Constraints.Width Numeric value of the named constraint Width in the sketch, if the expression is used in the sketch itself.
Value of constraint in a sketch MySketch.Constraints.Width Numeric value of the named constraint Width in the sketch, if the expression is used outside of the sketch.
Value of a spreadsheet alias Spreadsheet.Depth Value of the alias Depth in the spreadsheet Spreadsheet
Value of a local property Length Value of the 데이터Length property in e.g a Pad object, if the expression is used in e.g 데이터Length2 in the same object.

순환 종속성

FreeCAD는 속성이 아닌 문서 객체 간의 관계에 따라 종속성을 확인합니다. 즉, 객체에 데이터를 제공한다면 동일한 객체에 대한 결과를 조회할 수는 없습니다. 예를 들어 속성 자체를 고려할 때 순환 종속성이 없더라도 스프레드시트에서 치수를 가져온 다음 동일한 스프레드시트에 해당 개체의 볼륨을 표시하는 개체가 없을 수 있습니다. 하나는 모델을 구동하는 데, 다른 하나는 보고용으로 두 개의 스프레드시트를 사용해야 합니다.

해결 방법으로, 바인딩 종속성 숨기기 옵션과 함께 셀 바인딩을 만들어 두 번째 스프레드시트의 셀 범위를 첫 번째 스프레드시트에 표시하거나 그 반대로 표시할 수 있습니다.

순환 종속성을 해결하는 또 다른 방법은 개별 표현식에 대해 href 또는 hiddenref 함수를 사용하여 참조를 숨기는 것입니다(예: href(Box.Length)).

언급된 두 가지 해결 방법은 주의해서 사용해야 하며, 보고된 속성이 동일한 스프레드시트에서 구동되는 차원에 따라 달라지는 경우 작동하지 않습니다.

Top

문서 전체 전역 변수

현재 FreeCAD에는 전역 변수라는 개념이 없습니다. 대신, 임의의 변수는 스프레드시트 작업대를 사용하여 스프레드시트의 셀로 정의될 수 있으며, 셀의 별명 속성을 사용하여 이름을 지정할 수 있습니다(셀을 마우스 오른쪽 버튼으로 클릭). 그러면 다른 객체 속성과 마찬가지로 모든 표현식에서 접근할 수 있습니다.

Top

문서 사이 연결

다른 문서(.FCstd 파일)에 포함된 개체의 속성을 참조하는 표현식을 사용하여 현재 문서(.FCstd 파일)에 있는 개체의 속성을 정의하는 것은 (제한이 있긴 하지만) 가능합니다. 예를 들어, 스프레드시트의 셀이나 입방체의 데이터길이 등입니다. 한 문서에서는 다른 문서에 포함된 객체의 X 배치 값이나 다른 속성을 참조하는 표현식으로 정의할 수 있습니다.

문서의 이름은 다른 문서에서 참조하는 데 사용됩니다. 문서를 처음 저장할 때 파일 이름을 선택합니다; 이는 일반적으로 초기 기본 "Unnamed1"(또는 번역된 동등 값)과 다릅니다. 마스터 문서의 이름을 변경하여 저장할 때 링크가 손실되는 것을 방지하려면 먼저 마스터 문서를 만들고, 그 안에 스프레드시트를 만든 다음 저장하는 것이 좋습니다. 이후에도 해당 파일과 스프레드시트를 변경할 수는 있지만 이름을 바꾸면 안 됩니다.

스프레드시트가 포함된 마스터 문서가 만들어지고 저장(이름 지정)되면 종속 문서를 안전하게 만들 수 있습니다. 예를 들어 마스터 문서의 이름을 master로, 스프레드시트의 이름을 모형modelConstants로, 셀의 별명을 Lenth로 지정했다면 다음과 같이 값에 접근할 수 있습니다:

master#modelConstants.Length

마스터의 값을 종속 문서에서 사용할 수 있으려면 마스터 문서를 먼저 로드해야 합니다.

물론, 나중에 무엇인가를 변경하고 싶을 때 해당 문서를 로드하는 것은 여러분의 몫입니다.

Top

알려진 문제 / 남은 작업

Top

스크립트

import FreeCAD as App

doc = App.ActiveDocument
box = doc.addObject("Part::Box", "Box")
cyl = doc.addObject("Part::Cylinder", "Cylinder")
cyl_name = cyl.Name

box.setExpression("Height", f"{cyl_name}.Height / 2")
box.setExpression("Length", f"{cyl_name}.Radius * 2")
box.setExpression("Width", "Length")

doc.recompute()

# Expressions are stored in the ExpressionEngine property:
for prop, exp in box.ExpressionEngine:
    val = getattr(box, prop)
    print(f"Property: '{prop}' -- Expression: '{exp}' -- Current value: {val}")

Top